﻿Imports System.Data.SqlClient

Public Class Consultar

    Private _url_Servidor As String
    Private _obje As Libreria
    Private enlace As ADODB.Connection
    Dim url_Consulta As String
    Dim resp As ADODB.Recordset = New ADODB.Recordset
    Dim direccion_planeta As String = ""
    Sub New(ByVal url_Servidor As String, ByVal obje As Libreria)
        ' TODO: Complete member initialization 
        InitializeComponent()
        _url_Servidor = url_Servidor
        _obje = obje
        If _url_Servidor.Contains(".mdb") Then
            obje.Setdriver_access()
            enlace = obje.getEnlace()
        ElseIf _url_Servidor.Contains("sqloledb") Then
            obje.Setdriver_sql()
            enlace = obje.getEnlace()
        ElseIf _url_Servidor.Contains("MySQL") Then
            obje.Setdriver_mysql()
            enlace = obje.getEnlace()
        End If
    End Sub

    Private Sub btnConsulta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsulta.Click
        'Paneles.Enabled = True
        Ejecucion()
        Paneles.Enabled = True
    End Sub

    Private Sub Ejecucion()
        Dim encontrado As Boolean = False
        If enlace IsNot Nothing Then
            Try
                url_Consulta = "SELECT usuarios.nomb_usuarios, Razas.nomb_raza FROM usuarios " &
                    "INNER JOIN Razas ON usuarios.codi_raza = Razas.codi_raza where" &
                    " usuarios.nomb_usuarios = '" & txtUser.Text.Trim & "'"
                resp = enlace.Execute(url_Consulta)
                Console.WriteLine(url_Consulta)
                While resp.EOF <> True
                    ' El metodo getObject llama a las columnas
                    'ya sea por su nombre o su indice de columna en este caso comensando en 1
                    txtRaza.Text = resp.Fields(1).Value.ToString
                    If resp.Fields(0).Value.ToString.Equals(txtUser.Text().Trim()) Then
                        encontrado = True
                    End If
                    resp.MoveNext()
                End While
                If encontrado Then
                    url_Consulta = "SELECT Numero_direccion, Galaxia,nomb_usuarios" &
                        " FROM Direcciones where nomb_usuarios = '" & txtUser.Text.Trim & "'"
                    resp = enlace.Execute(url_Consulta)
                    While resp.EOF <> True
                        Agregar_Lista(resp.Fields(0).Value.ToString)
                        resp.MoveNext()
                    End While
                    Menu_Eliminar.Enabled = True 'Existe el elemento entonces se puede eliminar
                Else
                    MessageBox.Show("No se hallo la consulta")
                End If
            Catch ex As SqlException
                Console.WriteLine(ex.ErrorCode.ToString)
            End Try

        End If
    End Sub

    Private Sub SalirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SalirToolStripMenuItem.Click
        Dispose()
    End Sub

    Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiar.Click
        Limpiar()
    End Sub

    Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click
        Dispose()
    End Sub

    Private Sub Agregar_Lista(ByVal p1 As String)
        listDirecciones.Items.Add(p1)
    End Sub

    Private Sub Limpiar()
        txtUser.Text = ""
        txtRaza.Text = ""
        listDirecciones.Items.Clear()
        Paneles.Enabled = False
    End Sub

    Private Sub Menu_Eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu_Eliminar.Click
        If enlace IsNot Nothing Then
            Try
                url_Consulta = "DELETE FROM usuario_numero_naves WHERE (nomb_usuarios = '" & txtUser.Text().Trim() & "')"
                enlace.Execute(url_Consulta)
                url_Consulta = "DELETE FROM usuario_numero_tropas WHERE (nomb_usuarios = '" & txtUser.Text().Trim() & "')"
                enlace.Execute(url_Consulta)
                url_Consulta = "DELETE FROM usuario_numero_Defensas WHERE (nomb_usuarios = '" & txtUser.Text().Trim() & "')"
                enlace.Execute(url_Consulta)
                url_Consulta = "DELETE FROM Direcciones WHERE (nomb_usuarios = '" & txtUser.Text().Trim() & "')"
                enlace.Execute(url_Consulta)
                url_Consulta = "DELETE FROM usuarios WHERE (nomb_usuarios = '" & txtUser.Text().Trim() & "')"
                enlace.Execute(url_Consulta)
            Catch ex As SqlException
                Console.WriteLine(ex.ErrorCode)
            End Try
        End If
        Limpiar()
        LIMPIAR_PANELES()
        Paneles.Enabled = False
    End Sub
    Private Sub Paneles_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Paneles.SelectedIndexChanged
        Cambio_de_Elemento()
    End Sub

    Private Sub Cambio_de_Elemento()
        'Try
        Dim indice As Integer = Paneles.SelectedIndex
        Console.WriteLine("indice" & indice)
        'Retorna el indice de pestaña
        LIMPIAR_PANELES()
        If enlace IsNot Nothing Then
            Try
                If indice = 0 Then
                    'Panel tropas
                    url_Consulta = "SELECT nomb_tropas, cantidad_trop FROM usuario_numero_tropas WHERE (nomb_usuarios = '" & txtUser.Text().Trim() & "') AND (numero_Direccion = '" & direccion_planeta & "')"
                    Console.WriteLine(url_Consulta)
                    resp = enlace.Execute(url_Consulta)
                    Dim lista As New ArrayList()
                    Dim numero As New ArrayList()
                    While resp.EOF <> True
                        'System.out.println(resp.getObject(1)  & " " &  resp.getObject(2));
                        lista.Add(resp.Fields(0).Value)
                        numero.Add(resp.Fields(1).Value)
                        resp.MoveNext()
                    End While
                    Dim espaciado As Integer = CInt((Tropas.Height / lista.Count) + 1)
                    Crear_Objetos(espaciado, Tropas, lista, numero)

                ElseIf indice = 1 Then
                    'Panel naves
                    url_Consulta = "SELECT Nomb_Naves, cantidad_nav FROM usuario_numero_naves WHERE (nomb_usuarios = '" & txtUser.Text().Trim() & "') AND (numero_Direccion = '" & direccion_planeta & "')"
                    Console.WriteLine(url_Consulta)
                    resp = enlace.Execute(url_Consulta)
                    Dim lista As New ArrayList()
                    Dim numero As New ArrayList()
                    While resp.EOF <> True
                        ' System.out.println(resp.getObject(1)  & " " &  resp.getObject(2));
                        lista.Add(resp.Fields(0).Value)
                        numero.Add(resp.Fields(1).Value)
                        resp.MoveNext()
                    End While
                    Dim espaciado As Integer = CInt((Naves.Height / lista.Count) + 1)
                    Crear_Objetos(espaciado, Naves, lista, numero)

                Else
                    'Panel defensas
                    url_Consulta = "SELECT nomb_Defensas, cantidad_def FROM usuario_numero_Defensas WHERE (nomb_usuarios = '" & txtUser.Text().Trim() & "') AND (numero_Direccion = '" & direccion_planeta & "')"
                    Console.WriteLine(url_Consulta)
                    resp = enlace.Execute(url_Consulta)
                    Dim lista As New ArrayList()
                    Dim numero As New ArrayList()
                    While resp.EOF <> True
                        'System.out.println(resp.getObject(1)  & " " &  resp.getObject(2));
                        lista.Add(resp.Fields(0).Value)
                        numero.Add(resp.Fields(1).Value)
                        resp.MoveNext()
                    End While
                    Dim espaciado As Integer = CInt((Defensas.Height / lista.Count) + 1)
                    Crear_Objetos(espaciado, Defensas, lista, numero)

                End If
            Catch ex As SqlException
                Console.WriteLine(" 1" & ex.ErrorCode)
            End Try
        End If
        'Catch e As Exception
        'Evita que autoejecute el cambio teniendo valores nulos inicialmente
        'Console.WriteLine(" 2" & e.Message)
        ' End Try
    End Sub

    Private Sub LIMPIAR_PANELES()
        Tropas.Controls.Clear()
        Naves.Controls.Clear()
        Defensas.Controls.Clear()
    End Sub

    Private Sub Crear_Objetos(ByVal espaciado As Integer, ByVal panel_padre As TabPage, ByVal lista As ArrayList, ByVal numero As ArrayList)
        Dim etiketa(0 To lista.Count - 1) As Label
        Dim objetos_texto(0 To espaciado - 1) As TextBox
        For i As Integer = 0 To lista.Count - 1
            etiketa(i) = New Label()
            etiketa(i).Text = lista.Item(i).ToString
            panel_padre.Controls.Add(etiketa(i))

            objetos_texto(i) = New TextBox()
            panel_padre.Controls.Add(objetos_texto(i))
            objetos_texto(i).Text = (numero.Item(i).ToString)

            objetos_texto(i).SetBounds(300, 5 + espaciado * i, 50, 20)
            etiketa(i).SetBounds(20, 5 + espaciado * i, 150, 20)

        Next
    End Sub
    Private Sub listDirecciones_ItemSelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.ListViewItemSelectionChangedEventArgs) Handles listDirecciones.ItemSelectionChanged
        If e.Item.Selected Then
            Console.WriteLine(e.Item.Text)
            direccion_planeta = e.Item.Text
            Cambio_de_Elemento()
        End If
    End Sub
End Class